//
// Created by F1997 on 2025/4/9.
//

#ifndef NETWORK_TRAFFIC_PROCESSING_SHFE_DECODE_H
#define NETWORK_TRAFFIC_PROCESSING_SHFE_DECODE_H
#include "../utils/pch.h"

/*
 * 上期-能源行情解码
 *
 * */

class shfe_decode {
public:
    static void parse_packet_shfe(const struct pcap_pkthdr* pkthdr, const u_char* packet, MarketData& marketData, std::ofstream &outFile);

#pragma pack(1)
    // ------ 上期
    // MIRP 报文头=11个字段，24字节
    struct MIRPHeader
    {
        // 低4位为1，表示当前协议版本号为1，高4位中第4位为0，表示当前报文是本消息的最后一个报文
        uint8_t flag;            // 标识位和协议版本号。高4位为标识位，低4位为协议版本号，可以用来确认是否为消息的最后一个报文
        int8_t type_id;          // 报文类型，即消息类型，唯一代表一个消息种类，0x01 表示增量行情刷新消息
        uint16_t length;         // 报文体长度（不包括报文头）
        int32_t packet_no;       // 行情报文编号，唯一标记一个增量行情报文
        int16_t topic_id;        // 行情主题的主题代码
        uint16_t snap_millisec;  // 当前主题行情快照的毫秒级时间
        int32_t snap_no;         // 当前主题增量行情的快照编号
        uint32_t snap_time;      // 当前主题行情快照的秒级时间
        uint16_t comm_phase_no;  // 当前交易日从1980年01月01日开始的天数
        int8_t center_change_no; // 当前数据中心切换编号
        int8_t reserved;         // 保留字节
    };

#pragma pack()

};


#endif //NETWORK_TRAFFIC_PROCESSING_SHFE_DECODE_H
